# 在终端中与智能助手聊天
from openai import OpenAI

# 指向本地服务器
client = OpenAI(base_url="http://localhost:1234/v1", api_key="lm-studio")
# 初始化历史记录列表，其中包含系统和用户的角色和内容
history = [
    {"role": "system", "content": "你是一个聪明的助手。你总是提供合理、准确且有帮助的答案。总是用中文简体回答"},
    {"role": "user", "content": "你好，向第一次开启这个程序的人介绍你自己。请简洁明了。请用中文回答"},
]
# 使用while循环不断地接收用户输入并提供回答
while True:
    # 创建聊天完成请求，指定模型、历史消息和其他参数
    completion = client.chat.completions.create(
        model="model/QWen",
        messages=history,
        temperature=0.7,
        stream=True,
    )
    # 初始化新消息字典，用于存储助手的回答
    new_message = {"role": "assistant", "content": ""}
    # 遍历完成请求的结果，并打印内容
    for chunk in completion:
        if chunk.choices[0].delta.content:
            print(chunk.choices[0].delta.content, end="", flush=True)
            new_message["content"] += chunk.choices[0].delta.content

    # 将新消息添加到历史记录列表中
    history.append(new_message)

    # 当输入exit时退出程序
    if new_message["content"] == "exit":
        break

    # 如果需要查看聊天历史，可以取消注释以下代码
    # import json
    # gray_color = "\033[90m"
    # reset_color = "\033[0m"
    # print(f"{gray_color}\n{'-'*20} History dump {'-'*20}\n")
    # print(json.dumps(history, indent=2))
    # print(f"\n{'-'*55}\n{reset_color}")

    # 打印空行，并将用户的新输入作为消息添加到历史记录列表中
    print()
    history.append({"role": "user", "content": input("> ")})
